//! Yaya libOS 示例应用：Hello World
//! 
//! 演示如何使用Yaya libOS库创建简单的应用

use yaya::prelude::*;

fn main() -> Result<(), YayaError> {
    // 初始化Yaya运行时
    let mut runtime = Yaya::new()?;
    
    // 配置运行时参数
    let config = RuntimeConfig {
        stack_size: 1024 * 1024,      // 1MB栈
        heap_size: 16 * 1024 * 1024,   // 16MB堆
        enable_networking: false,
        enable_filesystem: true,
        enable_graphics: false,
    };
    
    runtime.configure(config)?;
    
    // 运行应用
    runtime.run(|| {
        println!("=== Yaya libOS Hello World ===");
        println!("欢迎使用Yaya库操作系统！");
        println!("");
        
        // 演示基本功能
        demo_basic_features()?;
        demo_memory_management()?;
        demo_system_info()?;
        
        println!("");
        println!("应用执行完成！");
        
        Ok(())
    })
}

/// 演示基本功能
fn demo_basic_features() -> Result<(), YayaError> {
    println!("1. 基本功能演示:");
    
    // 使用CPU管理器
    let cpu_manager = get_cpu_manager();
    println!("   - CPU核心数: {}", cpu_manager.core_count());
    
    // 使用内存管理器
    let memory_manager = get_memory_manager();
    println!("   - 内存管理器已初始化");
    
    // 使用调度器
    let scheduler = get_scheduler();
    let task_id = scheduler.create_task(0x1000, 4096, TaskPriority::Normal)?;
    println!("   - 创建任务: ID={}", task_id);
    
    Ok(())
}

/// 演示内存管理
fn demo_memory_management() -> Result<(), YayaError> {
    println!("2. 内存管理演示:");
    
    let allocator = get_allocator();
    
    // 分配内存
    let addr1 = allocator.allocate(1024, 16)?;
    let addr2 = allocator.allocate(2048, 32)?;
    
    println!("   - 分配内存块1: {:#x} (1KB)", addr1);
    println!("   - 分配内存块2: {:#x} (2KB)", addr2);
    println!("   - 已分配内存: {} bytes", allocator.allocated_size());
    println!("   - 可用内存: {} bytes", allocator.available_size());
    
    Ok(())
}

/// 演示系统信息
fn demo_system_info() -> Result<(), YayaError> {
    println!("3. 系统信息演示:");
    
    // 获取设备信息
    let device_manager = get_device_manager();
    device_manager.discover_devices()?;
    
    let interfaces = device_manager.get_interfaces();
    println!("   - 发现设备数量: {}", interfaces.len());
    
    for device in interfaces {
        println!("     * {}: {:?}", device.name, device.device_type);
    }
    
    Ok(())
}